class Check {
  testID(ID) {
    return this.IDRegExp.test(String(ID));
  }
  testEmail(email) {
    return this.emailRegExp.test(String(email));
  }
  testPhoneNumber(phoneNumber) {
    return this.phoneNumberRegExp.test(String(phoneNumber));
  }
  //自定义方法
  add(checkFormItemName, checkFormRegExp) {
    //传入 age 和 正则 age->this.ageRegExp 作为属性 age->testAge()作为方法
    //this[checkFormItemName + "RegExp"] = checkFormRegExp;

    //不用写在属性里，直接创建方法的时候 把具体的正则 checkFormRegExp 直接写在方法里
    this[formDataHander(checkFormItemName)] = (checkData) => {
      // return this[checkFormItemName + "RegExp"].test(String(checkData));
      return checkFormRegExp.test(String(checkData));
    };
    //返回这个对象实例 链式调用
    return this;
  }
}
Check.prototype.IDRegExp = /(^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)/;
Check.prototype.phoneNumberRegExp = /^1[3456789]\d{9}$/;
Check.prototype.emailRegExp = /^([a-zA-Z]|[0-9])(\w|\-)+@[a-zA-Z0-9]+\.([a-zA-Z]{2,4})$/;

function formDataCheck(opt, check) {
  //没有需要自定义的就用默认的
  check = check || new Check();
  let res = opt ? true : false;
  for (let key in opt) {
    let newkey = formDataHander(key);
    res = res && check[newkey](opt[key]);
  }
  return res;
}
//将  id -> 转化为 -> testId
function formDataHander(str) {
  return "test" + str[0].toUpperCase() + str.slice(1);
}

export default formDataCheck;
// 把Check对象导出用作扩展;
export { Check };
